#ifndef RING_BUFFER_H
#define RING_BUFFER_H

#include <stdint.h>
#include <stdbool.h>

typedef struct {
    uint8_t *buffer;    // 缓冲区指针
    uint16_t capacity;  // 缓冲区总容量
    uint16_t head;      // 指向下一个写入位置
    uint16_t tail;      // 指向下一个读取位置
    bool is_full;       // 缓冲区满标志
} ring_buffer_t;

// 初始化环形缓冲区
void ring_buffer_init(ring_buffer_t *rb, uint8_t *buffer, uint16_t size);

// 清空缓冲区
void ring_buffer_reset(ring_buffer_t *rb);

// 写入数据
bool ring_buffer_put(ring_buffer_t *rb, uint8_t data);

// 读取数据（取出）
bool ring_buffer_get(ring_buffer_t *rb, uint8_t *data);

// 只读不取（查看数据）
bool ring_buffer_peek(const ring_buffer_t *rb, uint8_t *data);

// 按偏移量查看数据（不取出）
bool ring_buffer_peek_at(const ring_buffer_t *rb, uint16_t offset, uint8_t *data);

// 获取当前有效数据量
uint16_t ring_buffer_size(const ring_buffer_t *rb);

// 检查缓冲区是否为空
bool ring_buffer_is_empty(const ring_buffer_t *rb);

// 检查缓冲区是否满
bool ring_buffer_is_full(const ring_buffer_t *rb);

#endif // RING_BUFFER_H